package org.chnxi.study.design.builder;

/**
 * 建造者模式属于创建型模式，它提供了一种创建对象的最佳方式
 * 定义：将一个复杂对象的构造与它的表示分离，使得同样的构建过程可以创建不同的标识
 * 主要作用：在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象
 *
 * 用户只需要给出指定复杂对象的类型和内容，建造者模式负责按照顺序创建复杂对象，把内部的建造过程和细节隐藏起来。
 *
 * 通过通过静态内部类方式实现零件无序装配构造，这种方式使用更加灵活，更符合定义。内部有复杂对象的默认实现，使用时可以
 * 根据用户需求自定义更改内容，并且无序改变具体的构造方式，就可以生产处不同的复杂对象
 */
public class BuilderTest {

    public static void main(String[] args) {
        //使用默认提供的建造者
        Director director = new Director();
        Product build = director.build(new Worker());
        System.out.println(build.toString());

        //使用自定义建造过程，用户可以参与到创建过程并制定特殊参数
        Worker worker = new Worker();
        Product product = worker.buildA("myBuildA").buildB("myBuildB")
                .buildC("myBuildC").buildD("myBuildD")
                .getProduct();
        System.out.println(product.toString());

    }

}
